package com.example.springboot3demo.mq;

import com.example.springboot3demo.config.RabbitMQConfig;
import com.example.springboot3demo.mq.dto.MessageDto;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;

/**
 * RabbitMQ消息消费者
 * 
 * 该类负责监听并处理来自RabbitMQ的消息，支持多种消息处理方式：
 * 1. 处理简单文本消息
 * 2. 处理对象消息（自动反序列化为Java对象）
 * 
 * 使用@RabbitListener注解监听指定队列的消息
 */
@Service
public class MessageConsumer {
    
    /**
     * 监听并处理队列中的文本消息
     * 
     * 当队列中有消息到达时，该方法会自动被调用
     * 
     * @param message 接收到的消息内容
     */
    @RabbitListener(queues = RabbitMQConfig.QUEUE_NAME)
    public void receiveMessage(String message) {
        System.out.println("[x] Received text message: '" + message + "'");
        // 在这里可以添加具体的业务逻辑来处理接收到的消息
        processMessage(message);
    }
    
    /**
     * 监听并处理队列中的对象消息
     * 
     * 当队列中有对象消息到达时，该方法会自动被调用
     * 消息会被自动反序列化为MessageDto对象
     * 
     * @param messageDto 接收到的消息对象
     */
    @RabbitListener(queues = RabbitMQConfig.QUEUE_NAME)
    public void receiveMessage(MessageDto messageDto) {
        System.out.println("[x] Received object message: " + messageDto);
        // 在这里可以添加具体的业务逻辑来处理接收到的对象消息
        processMessage(messageDto);
    }
    
    /**
     * 处理接收到的文本消息
     * 
     * 这里可以添加具体的业务逻辑
     * 
     * @param message 消息内容
     */
    private void processMessage(String message) {
        // 示例：简单的消息处理逻辑
        System.out.println("[x] Processing text message: '" + message + "'");
        
        // 在实际应用中，这里可能包含：
        // 1. 数据库存储
        // 2. 业务逻辑处理
        // 3. 其他服务调用
        // 4. 异常处理等
    }
    
    /**
     * 处理接收到的对象消息
     * 
     * 这里可以添加具体的业务逻辑
     * 
     * @param messageDto 消息对象
     */
    private void processMessage(MessageDto messageDto) {
        // 示例：简单的对象消息处理逻辑
        System.out.println("[x] Processing object message with ID: " + messageDto.getId());
        
        // 在实际应用中，这里可能包含：
        // 1. 数据库存储
        // 2. 业务逻辑处理
        // 3. 其他服务调用
        // 4. 异常处理等
    }
}